package org.charts.basic;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : java creator charts
// Archivo : ChartPie.java
// Descripcion : Clase ChartPie
// *************************************************************************/
// Version : 1.0.5
// Fecha de Creación: 14 de Diciembre de 2014
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import org.charts.interfaces.IChart;
import org.charts.objects.DataPie;
import org.charts.interfaces.IConfiguratorChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;

public class ChartPie implements IChart, IConfiguratorChart {

    // Atributos de la clase ChartPie
    
    private JFreeChart grafico;
    private DefaultPieDataset dataSet;
    private String title;
    private boolean leyend, url;
    private boolean informacion;
    private Font fontLabel, fontTitle;
    private Color colorBack, colorLabel, colorChart;

    // Constructores de la clase ChartPie
    
    public ChartPie() {
        this("ChartPie");
    }

    public ChartPie(String title) {
        initAttributes(); setTitle(title);
    }

    // Metodos de la clase ChartPie
    
    /**
     *
     */
    private void initAttributes() {
        setBackground(Color.ORANGE); setColorChart(Color.WHITE); url = true;
        setColorLabel(Color.WHITE); dataSet = new DefaultPieDataset();
        setVisibleLeyend(true); informacion = true; setFontChart("Segoe UI Light");
    }

    /**
     *
     * @param colorLabel
     */
    public void setColorLabel(Color colorLabel) {
        this.colorLabel = colorLabel;
    }

    /**
     *
     * @param fontLabel
     */
    public void setFontLabel(Font fontLabel) {
        this.fontLabel = fontLabel;
    }

    /**
     *
     * @param fontTitle
     */
    public void setFontTitle(Font fontTitle) {
        this.fontTitle = fontTitle;
    }

    /**
     *
     * @param tag
     * @param value
     */
    public void addValue(String tag, Number value) {
        addValue(new DataPie(value, tag));
    }

    /**
     *
     * @param dataPie
     */
    public void addValue(DataPie dataPie) {
        if (dataPie != null) {
            dataSet.setValue(dataPie.getTag(), dataPie.getValue());
        }
    }

    // Metodos sobreescritos de la clase ChartPie
    @Override
    public JFreeChart getChart() {
        return grafico;
    }

    @Override
    public Image getImage() {
        return grafico.getBackgroundImage();
    }

    @Override
    public final void setTitle(String title) {
        this.title = title;
    }

    @Override
    public void setBackground(Color colorPanel) {
        this.colorBack = colorPanel;
    }

    @Override
    public void setColorChart(Color colorChart) {
        this.colorChart = colorChart;
    }

    @Override
    public void createChart() {
        grafico = ChartFactory.createPieChart(null, dataSet, leyend, informacion, url);
        grafico.setTitle(new TextTitle(title, fontTitle)); grafico.setBackgroundPaint(colorBack);
        PiePlot plot = (PiePlot) grafico.getPlot(); plot.setLabelBackgroundPaint(colorLabel);
        plot.setBackgroundPaint(colorChart); plot.setLabelFont(fontLabel);
    }

    @Override
    public void setFontChart(String nameFont) {
        setFontLabel(new Font(nameFont, Font.PLAIN, 18)); setFontTitle(new Font(nameFont, Font.PLAIN, 24));
    }

    @Override
    public void setVisibleLeyend(boolean leyend) {
        this.leyend = leyend;
    }
}